package com.spring.forum.model;

import com.spring.forum.enums.ResultCode;
import lombok.Data;

@Data
public class Result<T> {
    // 业务码，表示业务是处理成功还是失败, 使用枚举
    private ResultCode code;

    // 若业务失败，失败信息
    private String errMsg;

    // 若成功，返回的统一类型，使用Object(使用泛型也可以)
    private Object data;

    // 业务成功情况使用该方法进行统一返回
    public static <T> Result<T> success(T data) {
        Result<T> result = new Result<T>();
        result.setCode(ResultCode.SUCCESS);
        result.setErrMsg("业务成功");
        result.setData(data);
        return result;
    }

    // 业务失败情况使用该方法进行统一返回
    // 失败情况也会有数据返回的场景
    public static <T> Result<T> error(T date, String errMsg) {
        Result<T> result = new Result<T>();
        result.setCode(ResultCode.FAIL);
        result.setErrMsg(errMsg);
        result.setData(date);
        return result;
    }

    // 失败，但无数据返回的场景
    public static <T> Result<T> errorNoData(String errMsg) {
        Result<T> result = new Result<T>();
        result.setCode(ResultCode.FAIL);
        result.setErrMsg(errMsg);
        result.setData(null); // 无数据返回
        return result;
    }
}
